package indi.service;

import java.sql.ResultSet;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;

import indi.DAO.Dao;
import indi.entity.Card;
import indi.entity.Record;
import indi.entity.Title;

public class RecordService {
	
	public static int COUNTOFRECORD;
	//当前借书记录
	private ArrayList<Record> currentRecords;
	
	//构造函数
	public RecordService() {
		super();
		this.currentRecords = new ArrayList<>();
		this.COUNTOFRECORD = currentRecords.size();
	}
	
	//添加借书记录;返回生成的借阅记录
	public Record addRecord(Card card, Title title) {
		Record record = null;
		try {
			//生成一条借书记录，通过isbn和liscence添加联系
			record = new Record("" + card.getId(), "" + title.getISBN());
			//将借书记录添加到列表
			currentRecords.add(record);
		}catch(Exception e) {
			e.printStackTrace();
		}
		return record;
	}
	
	//添加多个借书记录;返回生成的借阅记录。
	// 输入：卡；书本列表
	public Record addRecords(Card card, ArrayList<Title> titles) {
		Record records = null;
		try {
			for(Title e: titles) {
				//生成一条借书记录，通过isbn和liscence添加联系
				records = new Record("" + card.getId(), "" + e.getISBN());
				//将借书记录添加到列表
				currentRecords.add(records);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		return records;
	}
	//通过书籍类删除借书记录
	public boolean removeRecord(Title title) {
		for(int i =0; i<currentRecords.size();i++) {
			//第i本书的isbn equals，则删掉
			if(true == currentRecords.get(i).getISBN().equals(title.getISBN())) {
				currentRecords.remove(i);
				return true;
			}
		}
		return false;
	}
	
	//通过ISBN方式删除借书记录
	//
	public boolean removeRecord(String isbn) {
		for(int i =0; i<currentRecords.size();i++) {
			//第i本书的isbn equals，则删掉
			if(true == currentRecords.get(i).getISBN().equals(isbn)) {
				currentRecords.remove(i);
				return true;
			}
		}
		return false;
	}
	
	//更新借书记录
	public boolean updateBorrowRecord(String isbn) {
		return false;
	}
	//查询借书记录。可以改进，提速
	public Record queryBorrowRecord(String isbn) {
		
		try {
			for(Record e:currentRecords) {
				if(isbn.equals(e.getISBN())) {
					return e;
				}
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
			
		return null;
	}
	//判断一条借书记录是否逾期
	public boolean isOverdue(Record record) {
		return false;
	}
	//返回借书记录个数
	public static int getCOUNTOFRECORD() {
		return COUNTOFRECORD;
	}
	
	
	
	// 将当前列表中借阅记录存储入数据库
	/**
	 * @return the currentRecords
	 */
	public ArrayList<Record> getCurrentRecords() {
		return currentRecords;
	}

	private void saveRecordToDB() {
		Dao db = new Dao();
		
		try{
			// 获取数据库链接
				db.connectToDatabase();
				for (Title t : currentRecords) {
					// 保存匹配记录中的登录日志
					String sql = ;//修改"INSERT INTO gather_logrec(id,time,address,type,username,ip,logtype) VALUES(?,?,?,?,?,?,?)";
					Object[] param = new Object[] {};/*参数修改{ null,
							new Timestamp(title.getTime().getTime()),
							login.getAddress(), login.getType(), login.getUser(),
							login.getIp(), login.getLogType() };*/
					db.update(sql, param);
					/* 获取最后一行ID,不一定需要
					ResultSet rs = db.query("SELECT LAST_INSERT_ID()", null);
					int loginKey = 0;
					if(rs.next())
						loginKey = rs.getInt(1);
					t.setId(loginKey);
					*/
				}
				// 关闭数据库连接，释放资源
				db.closeAll();
		}catch(Exception e){
			throw e;
		}
	}
	// 从数据库读取借书记录到当前列表
	private void readRecordsFromDB() {
		
		//ArrayList<Title> titlesInDB = new ArrayList<>();
				Dao db = new Dao();
				
				try{
					//获取数据库连接
					db.connectToDatabase();
					//查询所以书籍信息
					String sql= "";//参照下写
							/*"SELECT i.id, i.time, i.address, i.type, i.username, i.ip, i.logtype,"
							+"o.id, o.time, o.address, o.type, o.username, o.ip, o.logtype "
							+"FROM matched_logrec m, gather_logrec i, gather_logrec o "
							+"WHERE m.loginid = i.id AND m.logoutid = o.id";*/
					ResultSet rs = db.query(sql, null);
					while(rs.next()){
						// 获取一行书本信息
						Title oneTitle = new Title(rs.getInt(1)...);// 待补充
						// 加入书本列表
						currentTitles.add(oneTitle);
					}
					//关闭数据库连接，释放资源
					db.closeAll();
				}catch(Exception e){
					e.printStackTrace();
				}
				//返回匹配日志信息集合
				return currentTitles;
			
	}

	public void outputRecords(ArrayList<Record> records) {
		for(Record e: records) {
			System.out.println(e.toString());
		}
	}
	public ArrayList<Record> returnCurrentRecords() {
		return currentRecords;
	}
}
